package com.ruoyi.activiti;

import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.system.domain.ActivitiLeave;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;

import java.util.List;

/**
 * 任务查询
 * 类：ActivitiTaskQuery
 */
public class ActivitiTaskQuery {
//    public static void main(String[] args)

    private static ActivitiTaskQuery _instance = null;

    public static ActivitiTaskQuery getInstance()
    {
        if(_instance == null)
        {
            _instance = new ActivitiTaskQuery();
        }
        return _instance;
    }


    //打印查询任务的测试函数
    @org.junit.Test
    public void testTask()
    {
        getTask();
    }

    public Task getTask()
    {
        return queryTask(new ActivitiLeave());
    }

    ///查询这个审批单中，我可以进行的任务有哪些
    public static Task queryTask(ActivitiLeave activitiLeave)
    {
        System.out.println("...开始查询所有任务...");
        //1.湖片区ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.获取taskServic
        TaskService taskService = processEngine.getTaskService();
        //3.根据流程定义的key，负责人assignee来实现当前用户的任务列表查询
//        List<Task> list = taskService.createTaskQuery()
//                .processDefinitionKey("myProcess_1")//.list();//""holiday")
//                .taskAssignee("张燕茹").list();  //taskAssignee是什么意思：流程负责人，可以在bpmn的流程节点属性指定属性传入方式

        SysUser sysUser = ShiroUtils.getSysUser();

        //查找当前请假单中我可以执行的操作
        List<Task> list = taskService.createTaskQuery()
                .processInstanceBusinessKey(activitiLeave.getId()+"")
          //      .taskAssignee(sysUser.getUserId()+"")
//                .processDefinitionKey("myProcess_1")//.list();//""holiday")
//                .taskAssignee("张燕茹")
                .list();  //taskAssignee是什么意思：流程负责人，可以在bpmn的流程节点属性指定属性传入方式
        //4.任务列表的展示
        int index = 1;
        Task testTask = null;
        for (Task task : list) {
            System.out.println("【"+(index ++)+"】流程实例id："+task.getProcessInstanceId()
                    +",任务id:"+task.getId()+",任务负责人:"+task.getAssignee()+",任务名称:"+task.getName()
//                    +"" + task.+
                    + ",getDelegationState="+ task.getDelegationState()
                    +",owner="+task.getOwner());

            testTask = task;
        }
        return testTask;
    }
}
